package com.gaogzhen.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gaogzhen.domain.User;
import com.gaogzhen.dto.UserDto;
import com.gaogzhen.model.*;
import com.gaogzhen.vo.UserAuthInfoVo;

import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 * @version 1.0
 * @description ${description}
 * @date 2022-06-07 11:46
 */
public interface UserService extends IService<User> {


    /**
     * 分页查询会员列表
     * @param page      分页参数
     * @param userId    会员id
     * @param userName  会员名
     * @param realName  会员姓名
     * @param mobile    手机号
     * @param status    会员启用状态
     * @param reviewsStatus 会员状态
     * @return          会员列表
     */
    Page<User> findByPage(Page<User> page, String userId, String userName, String realName, String mobile, Integer status, Integer reviewsStatus);

    /**
     * 更新会员
     * @param user  会员信息
     */
    void updateUser(User user);

    /**
     * 启用禁用会员
     * @param id        会员id
     * @param status    启用禁用状态
     */
    void updateStatus(String id, Integer status);


    /**
     * 分页查询邀请人
     * @param page      分页参数
     * @param userId    会员id
     * @return          邀请人列表
     */
    Page<User> getDirectInvites(Page<User> page, Long userId);

    /**
     * 查询会员认证审核详情
     * @param id    会员id
     * @return      认证审核详情
     */
    UserAuthInfoVo getAuthInfo(Long id);

    /**
     * 审核
     * @param id            用户id
     * @param authStatus    审核状态
     * @param authCode      唯一标识
     * @param remark
     */
    void updateUserAuthStatus(Long id, Integer authStatus, Long authCode, String remark);

    /**
     * 用户的实名认证
     * @param currentUserId     当前用户ID
     * @param userAuthForm      用户认证信息
     * @return
     */
    boolean identifyVerify(Long currentUserId, UserAuthForm userAuthForm);

    /**
     * 用户高级实名认证
     * @param currentUserId     当前用户ID
     * @param images            认证图片
     */
    void authUser(Long currentUserId, List<String> images);

    /**
     * 修改手机号
     * @param currentUserId
     * @param updatePhoneParam updatePhoneParam的json数据
     */
    void updatePhone(Long currentUserId, UpdatePhoneParam updatePhoneParam);

    /**
     * 检验新是手机号是否可用，若可用，则给新的手机号发送一个验证码
     * @param mobile
     * @param countryCode
     */
    void checkTel(String mobile, String countryCode);

    /**
     * 修改登录密码
     * @param userId                用户ID
     * @param updateLoginPassword   参数
     */
    void updateLoginPassword(Long userId, UpdatePasswordParam updateLoginPassword);

    /**
     * 修改登录密码
     * @param userId                用户ID
     * @param updatePassword   参数
     */
    void updatePayPassword(Long userId, UpdatePasswordParam updatePassword);

    /**
     * 重置交易密码
     * @param userId                用户ID
     * @param resetPayPasswordParam   参数
     */
    void resetPayPassword(Long userId, ResetPayPasswordParam resetPayPasswordParam);

    /**
     * 获取用户的邀请列表
     * @param userId        用户ID
     * @return              用户的邀请列表
     */
    List<User> getUserInvites(Long userId);

    /**
     * 远程调用
     *  查询用户的简要信息
     * @param ids   用户id集合
     * @param username  用户名
     * @param mobile    手机号
     * @return      用户简要信息集合
     */
    Map<Long, UserDto> getBriefUsers(List<Long> ids, String username, String mobile);

    /**
     * 用户注册
     * @param registerParam 注册表单
     */
    void register(RegisterParam registerParam);

    /**
     * 重置登录密码
     * @param resetPasswordParam    重置表单
     */
    void resetPassword(ResetPasswordParam resetPasswordParam);
}
